1. Field of the Invention
This invention relates to a distributed and portable execution environment.
2. Description of Related Art
A first aspect of the invention relates to using a host computer from a remote computer.
It has become common to couple computers together in networks, so that resources at a host computer on the network is accessible by a user remote to the host computer but with access to another computer on the network. It has further become common for networks of computers to be coupled together into a common network of networks, sometimes called an "internet". Computers coupled to an internet may also have a variety of differing hardware or software architectures, such as processor types or operating systems. Remote users with access to a computer would generally like to access resources on host computers without having to issue explicit commands for communication between computers or for translation between software constructs used on different computers.
One method of the prior art has been to provide explicit protocols for communication between computers and for accessing resources between computers. These protocols have included "Telnet", for providing a communication path and login session at a host computer to a remote user, "FTP" (file transfer protocol), for providing transfer of file objects to or from a remote computer, and electronic mail, for transferring messages between users at different computers.
While this method achieves the general goal of making resources available between computers, it has the drawback that the narrow scope of operation of these protocols has made sharing resources between computers more unwieldy than desirable. This method also has the further drawback that users attempting to access resources at a remote computer must generally have a good idea of the nature and structure of those resources, such as having detailed knowledge about the operating system of the remote computer.
Another method of the prior art has been to provide an electronic mail protocol, sometimes called "active mail" or "MIME", that allows the mail itself to execute a program when read by the recipient. While this method of the prior art achieves the general goal of executing a program at a host computer from a remote computer, it has the drawback that execution of the program (including when the program is executed and what resources it is allowed to access) is not under control of the sender. Moreover, the concept of active mail provides for only a very few types of operations that may be executed at a host computer, and only those that might be appropriate for electronic mail messages.
Another method of the prior art has been to provide software for remote access to specific data structures on host computers, such as menus or hypertext documents. These documents have included "Gopher" menus, for directing users to documents and to further gopher menus, and "HTML" (hypertext markup language) documents, for directing users to other documents in a variety of formats, generally available by means of programs such as "Mosaic". One version of this method, implemented for the "Prospero" system, has been to provide a virtual file system, overlaid on the actual file system of the host computer, that a remote user may access using software provided for that purpose. The Prospero system is further described in B. Clifford Newman, "Prospero: A Tool for Organizing Internet Resources", Electronic Networking: Research, Applications, and Policy, 2(1) (Spring 1992), hereby incorporated by reference, and is available by inquiry from the authors of that article, or on the Internet. While this method appears to achieve the general goal of making remote access to resources more convenient, it has the drawback that access is generally limited to specific data structures or specific types of data structures, and primarily to those data structures that have been set up in the necessary format for remote access.
The prior art has been particularly unsuccessful at providing convenient access to the processing power of a host computer by remote users. For example, the "Telnet" protocol achieves the purpose of providing a method for remote users to create, transfer and run programs, but has the drawback that those remote users must generally alter the programs to account for differences between computers. Documents in the "Gopher" and "HTML" format do not provide remote access to programs or programming capability, except sometimes in the limited sense of viewing picture files or performing text searches on a preselected database, and then only if the recipient has preset the document for that purpose. Moreover, any protocol for providing the processing power of a host computer should also provide for control at the host computer of the amount of resources and the activities permitted to a remote user.
Another method of the prior art has been to provide a "network" operating system that makes a network of computers appear to a user as a single computer system. Such network operating systems have included the "National Software Works" project, and many local network operating system products. While this method appears to achieve the general goal of making remote access to resources more convenient, it has the drawback that access is generally limited to data structures, rather than to the processing capability or other resources of the host computer. Where access has been provided to processing capability or other resources, it has been on a very limited basis, such as the ability to run specific programs that have been predetermined by the network operating system.
Accordingly, it would be advantageous to provide a method by which remote users having access to a computer could access the full set of resources at a host computer, without having to have a good idea of the nature and structure of those resources, such as having detailed knowledge about the operating system of the host computer. Such a full set of resources should advantageously include the processing power of the host computer, as applied to new computer programs selected or created by the remote user.
A second aspect of the invention relates to providing a portable virtual operating system.
It has become common for computers to be provided with a set of disparate hardware and software, with the result that different computers often have widely varying execution environments. Programs written for one execution environment often are unable to execute in a different execution environment, or may execute with only reduced functionality. It has therefore become common for distributors of programs to provide several variations on essentially the same program, with each variation tailored for a different execution environment.
One method of the prior art has been to provide higher level programming languages for programming. Thus, instead of programming in the machine language of a target set of hardware, the programmer may program in a language that is translated into that machine language for execution. The "machine language" comprises actual binary instructions that are executed by the hardware, and is sometimes referred to today as a "binary executable".
According to this method, assembly languages were developed, that provided a symbolic representation of the machine language and were transliterated into machine language. A translator from the assembly language to the machine language was then required. Some assembly languages also provided extensive macro capabilities. Assembly languages had the advantage that they could be programmed symbolically, and without reference to the actual time or location the program was loaded into memory. However, assembly languages have the drawback that they are directed at only a single target set of hardware.
Compiled languages were developed after assembly languages. Examples include "FORTRAN", "COBOL", and "PL/I". A compiler from the compiled language was then required, sometimes from the compiled language into an assembly language, and sometimes from the compiled language directly into the machine language. Some compiled languages also provided extensive preprocessor capabilities. Compiled languages had the advantage that they could be programmed in a syntax other than the machine language, in constructs more natural the human programmer, and without reference to the actual machine instructions the program would execute. However, it quickly developed that any program other than a very simple one would depend upon aspects of the operating system and thus would be directed at only a few target operating systems.
In contrast, interpreted languages provide an environment in which the program may execute. An interpreter of the interpreted language was then required, the interpreter being a program that is executed by the hardware and controlled by the operating system software of the host computer. The interpreter analyses the statements of the program to be interpreted and simulates their execution in the environment provided by the interpreter.
Interpreted languages have an advantage over compiled languages, in that the interpreter scrutinize the actions of the program being interpreted, and may make runtime checks on those actions to assure they meet criteria of acceptability. For example, if the program attempts to violate security requirements, or to use too much memory space or processor time, or to use prohibited features of the hardware, the interpreter may refuse to perform those actions and may issue an error. However, it was found that interpreted languages had the drawback of being generally slower than compiled languages, and so interpreted languages have generally been eschewed for operating system software.
Another method of the prior art has been to provide a "virtual machine" for execution of the program. The virtual machine provides a layer of software, typically part of the operating system software, that simulates a computer that has been reserved for execution of the specific program. Sometimes the virtual machine is augmented by calls to services provided by the operating system, such as memory management. However, the virtual machines provided in the prior art generally were directly mapped onto the hardware of the real machine on which the program was executing. Thus, the program to be executed on the virtual machine was still required to be tailored for that particular hardware and the services provided by the particular operating system software.
Accordingly, it would be advantageous to provide a virtual execution environment for which programs could be written that are capable of execution on different computer hardware and with different operating systems.